package cn.lsp.sharkmall.service;

import cn.lsp.sharkmall.pojo.dto.SaveCartItemDTO;
import cn.lsp.sharkmall.pojo.dto.UpdateCartItemDTO;
import cn.lsp.sharkmall.pojo.entity.ShoppingCartItem;
import cn.lsp.sharkmall.pojo.vo.ShoppingCartItemVO;
import cn.lsp.sharkmall.util.*;

import java.util.List;

/**
 * @Description: 购物车服务层接口
 * @Author: sweeterjava@163.com
 * @Date: 2023/2/13
 * @Time: 00:32
 */
public interface IShoppingCartService {
    /**
     * 保存商品至购物车中
     *
     * @param saveCartItemParam
     * @param userId
     * @return
     */
    String saveCartItem(SaveCartItemDTO saveCartItemParam, Long userId);

    /**
     * 修改购物车中的属性
     *
     * @param updateCartItemParam
     * @param userId
     * @return
     */
    String updateCartItem(UpdateCartItemDTO updateCartItemParam, Long userId);

    /**
     * 获取购物项详情
     *
     * @param shoppingCartItemId
     * @return
     */
    ShoppingCartItem getCartItemById(Long shoppingCartItemId);

    /**
     * 删除购物车中的商品
     *
     * @param shoppingCartItemId
     * @param userId
     * @return
     */
    Boolean deleteById(Long shoppingCartItemId, Long userId);

    /**
     * 获取我的购物车中的列表数据
     *
     * @param userId
     * @return
     */
    List<ShoppingCartItemVO> getMyShoppingCartItems(Long userId);

    /**
     * 根据userId和cartItemIds获取对应的购物项记录
     *
     * @param cartItemIds
     * @param userId
     * @return
     */
    List<ShoppingCartItemVO> getCartItemsForSettle(List<Long> cartItemIds, Long userId);

    /**
     * 我的购物车(分页数据)
     *
     * @param pageUtil
     * @return
     */
    PageResult getMyShoppingCartItems(PageQueryUtil pageUtil);
}
